﻿
using log4net;
using NEGOCIOS;
using NEGOCIOS.ENTIDADES.Message;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class VerCorreos : System.Web.UI.Page
{
    ILog logger = LogManager.GetLogger(typeof(VerCorreos));

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            CargarMensajesPorUsuariLogueado();
            logger.Info("Se cargaron los mensajes por Usuario");
        }
    }
    private void CargarMensajesPorUsuariLogueado()
    {
        recargarGrid();
    }
    private void recargarGrid() {
        List<Message> lista = MailServer.MensajesPorUsuario((string)this.Session["usuario"]);
        List<MensajeGrid> listagrid = CargarMensajeEnEntidadParaElGrid(lista);
        grdCorreos.DataSource = listagrid;
        grdCorreos.DataBind();
        logger.Info("Grid Cargado y actualizado");
    }
    protected void Ver_Click(object sender, EventArgs e)
    {
        int  pos =Convert.ToInt32(((Button)sender).CommandArgument);
        List<Message> lista = MailServer.MensajesPorUsuario((string)this.Session["usuario"]);
        List<MensajeGrid> listagrid = CargarMensajeEnEntidadParaElGrid(lista);
        MensajeGrid mensaje =listagrid.ElementAt(pos);
        Message mens = lista.ElementAt(pos);
        lblasunto.Text = mensaje.Asunto;
        lblusuario.Text = mensaje.De;
        lblmensaje.Text = mensaje.Contenido;
        MailServer.AtualizarEstadoCorreo(mens);
        recargarGrid();
    }

    private List<Message> recorrerGridyVerificarCheckeados()
    {
         List<Message> lista = MailServer.MensajesPorUsuario((string)this.Session["usuario"]);
         List<Message> listaEliminar = new List<Message>();
         int pos = 0;
            foreach (GridViewRow grd_Row in grdCorreos.Rows)
            {
                CheckBox check = grd_Row.FindControl("chkSeleccion") as CheckBox;
                if (check.Checked)
                {
                  listaEliminar.Add(lista.ElementAt(pos));
                }
                pos++;
            }
            logger.Info("Retorna la lista con los correos a eliminar");
            return listaEliminar;
    }

    public List<MensajeGrid> CargarMensajeEnEntidadParaElGrid(List<Message> lista)
    {
        List<MensajeGrid> listagrid = new List<MensajeGrid>();
        for (int i = 0; i < lista.Count; i++)
        {
            MensajeGrid mensajegrid = new MensajeGrid();
            Message mensaje = lista.ElementAt(i);
            CabeceraMessage cabesa= mensaje.CabeceraMensaje1;
            CuerpoMessage cuerpo= mensaje.CuerpoMensaje1;
            mensajegrid.ID = mensaje.Idmensaje;
            mensajegrid.Asunto = cuerpo.AsuntoMensaje1;
            mensajegrid.Contenido = cuerpo.TextMensaje1 ;
            mensajegrid.Para = cabesa.Destinatario;
            mensajegrid.De = cabesa.Sender;
            mensajegrid.Estado = mensaje.Estado;
            listagrid.Add(mensajegrid);
            logger.Info("Se cargo la lista de mensajes del usuario actual");
        }
        return listagrid;
    }

    protected void btn_Inicio_Click(object sender, EventArgs e)
    {
        Response.Redirect("Home.aspx");
        logger.Info("Se redirigio a la pantalla Inicio");
    }
    protected void btn_RedactarCorreo_Click(object sender, EventArgs e)
    {
        Response.Redirect("RedactarCorreo.aspx");
        logger.Info("Se redirigio a la pantalla Redactar Correo");
    }
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        this.Session["usuario"] = null;
        Response.Redirect("Login.aspx");
        logger.Info("Cerro Sesion el Usuario");
    }
    protected void grdCorreos_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    protected void eliminar_seleccionado_Click(object sender, EventArgs e)
    {
        List<Message> lista = recorrerGridyVerificarCheckeados();
        MailServer.EliminarMensajes(lista);
        recargarGrid();
        logger.Info("Se eliminaron los correos seleccionados de la lista");
    }
}